#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //通过一套信号槽，搭配不同的参数，可以达到不同的效果
    connect(this, &Widget::mySignal, this, &Widget::handleMySignal);

    //发送自定义信号
    //发送信号的操作，可以在任意合适的代码中，不一定非要在构造函数中
    //emit mySignal();
}

Widget::~Widget()
{
    delete ui;
}

//不带参数
//void Widget::handleMySignal()
//{
//    this->setWindowTitle("处理自定义信号");
//}


//void Widget::on_pushButton_clicked()
//{
//    //此时点击按钮，发送自定义信号
//    emit mySignal();

//    //Qt 5中，发射信号的操作都包含在mySignal内部生成的函数定义了
//    //mySignal();直接这样写也没有错
//    //但是在实际开发中，还是建议加上emit，增加代码可读性，更明显标识出这是在发射信号
//}

//过程：点击按钮 -> QPushButton::clicked -> Widget::on_pushButton_clicked() ->
//emit mySignal() -> Widget::handleMySignal()

// /////////////////////////////////////////////////////////////////////////////////

//带参数
//void Widget::handleMySignal(const QString& text)
//{
//    this->setWindowTitle(text);
//}


//void Widget::on_pushButton_clicked()
//{
//    //此时点击按钮，发送自定义信号
//    emit mySignal("把标题设置为标题1");

//}

//void Widget::on_pushButton_2_clicked()
//{
//    //此时点击按钮，发送自定义信号
//    emit mySignal("把标题设置为标题2");
//}

//传参可以起到复用代码的效果
//有多个逻辑，逻辑上整体一致，但是涉及到的数据不同
//就可以通过函数-参数来复用代码，并且在不同场景中传入不同参数即可

// /////////////////////////////////////////////////////////////////////

//参数不同
void Widget::handleMySignal(const QString& text)
{
    this->setWindowTitle(text);
}


void Widget::on_pushButton_clicked()
{
    //此时点击按钮，发送自定义信号
    emit mySignal("把标题设置为标题1", "");

}

void Widget::on_pushButton_2_clicked()
{
    //此时点击按钮，发送自定义信号
    emit mySignal("把标题设置为标题2", "");
}

// 所谓的信号槽，终究要解决的问题就是响应用户的操作
// 信号槽其实在GUI开发的各种框架中，是一个比较有特色的存在
